home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / newsgrp / group93a.txt / 000016_icon-group-sender _Wed Jan 13 17:26:28 1993.msg < prev    next >
Internet Message Format  |  1993-04-21  |  3KB

  1. Received: by cheltenham.cs.arizona.edu; Thu, 14 Jan 1993 05:22:48 MST
  2. Date: 13 Jan 93 17:26:28 GMT
  3. From: mercury.hsi.com!mlfarm!cs.arizona.edu!icon-group@uunet.uu.net  (Steve Wampler)
  4. Subject: Re: Pattern matching in Icon?
  5. Message-Id: <9301131726.AA18608@turing.cse.nau.edu>
  6. Sender: icon-group-request@cs.arizona.edu
  7. To: icon-group@cs.arizona.edu
  8. Status: R
  9. Errors-To: icon-group-errors@cs.arizona.edu
  10.  
  11. On Jan 13 at  5:01pm, Michael Sperber writes:
  12. } I'll try to make myself even clearer than last time.  Let's take
  13. } the example again:
  14. } case s of {
  15. }   syntax_tree("let", args) : ... # args is assigned to the arguments
  16. }                                  # field of s
  17. }   syntax_tree("apply", args) : ...
  18. } }
  19. }  
  20. } Here, I probably glitched a bit, and things would have to look a bit
  21. } different syntactically.  What I meant though, was that the case is
  22. } not supposed to evaluate the syntax_trees.  Instead it's supposed to
  23. } look if a is a record of type syntax_tree, and, if so, execute the
  24. } first case, if the first component is "let", binding args to the
  25. } second component for the following statements.  Admittedly, I didn't
  26. } think as much about syntax as I should have, and more work would have
  27. } to be done on it.  However, I hope it's clear what I mean.
  28. } Cheers :-> Chipsy
  29. Ah, I think I fully understand.  I think this would take quite a
  30. bit of changes to Icon to work - consider that in Icon, 'syntax_tree'
  31. is just a function call, the user could (in a perverse moment), do
  32.  
  33.     syntax_tree := f
  34.  
  35. and the case statement suddenly changes.  I think the problem could
  36. be resolved in specific instances, but it would greatly complicate the
  37. case statement:
  38.  
  39.   (if this function is a record constructor, then don't evaluate it,
  40.   it's a pattern...)
  41.  
  42. but I don't see how to do it in general.  I think you would have
  43. to restrict case clauses to *only* literals and patterns, which is
  44. more restrictive than now (not that it would likely impact many people).
  45.  
  46. In the present form, you can still do it by
  47. building your own set of pattern-matching operations (since the
  48. runtime system has to have something to do it anyway):
  49.  
  50.    case s of {
  51.      match_syntax_tree("let",s) : ...
  52.      match_syntax_tree("apply",s) :...
  53.  
  54. which would require you (as the programmer) to establish the pattern-matching
  55. rules - though to me that's a net win, since I might want to do some form
  56. of pattern matching that the language implementor didn't anticipate (such
  57. as some form of 'symantic' pattern matching).
  58.  
  59. -- 
  60.     Steve Wampler
  61.     {....!arizona!naucse!sbw}
  62.     {sbw@turing.cse.nau.edu}
  63.